package com.flying.io.common_io;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.FileFileFilter;
import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Collection;

/**
 * @author 刘鹏飞
 * @ClassName TestFileUtils
 * @Date 2025/2/24 23:01
 * @Created by 刘鹏飞
 * @Description${TODO}
 */
public class TestFileUtils {

    /**
     * 方法名	使用说明
     * cleanDirectory	清空目录，但不删除目录
     * contentEquals	比较两个文件的内容是否相同
     * copyDirectory	将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的文件
     * copyFile	将一个文件拷贝到一个新的地址
     * copyFileToDirectory	将一个文件拷贝到某个目录下
     * copyInputStreamToFile	将一个输入流中的内容拷贝到某个文件
     * deleteDirectory	删除目录
     * deleteQuietly	删除文件
     * listFiles	列出指定目录下的所有文件
     * openInputSteam	打开指定文件的输入流
     * readFileToString	将文件内容作为字符串返回
     * readLines	将文件内容按行返回到一个字符串数组中
     * size	返回文件或目录的大小
     * write	将字符串内容直接写到文件中
     * writeByteArrayToFile	将字节数组内容写到文件中
     * writeLines	将容器中的元素的toString方法返回的内容依次写入文件中
     * writeStringToFile	将字符串内容写到文件中
     */
    @Test
    public void test1() throws IOException {
        // 读取一根文本文件中的内容
        String s = FileUtils.readFileToString(new File("myday.txt"), StandardCharsets.UTF_8);

        System.out.println(s);



        // 列出文件目录层级
        Collection<File> files = FileUtils.listFiles(new File("E:\\Java\\commons-io-2.18.0-bin\\commons-io-2.18.0"), new FileFileFilter(){
            @Override
            public boolean accept(File file) {
                return super.accept(file);
            }
        }, new DirectoryFileFilter(){
            @Override
            public boolean accept(File file) {
                return super.accept(file);
            }
        });
        files.forEach(System.out::println);



        //  文件目录拷贝

        FileUtils.copyDirectory(new File("E:\\Java\\commons-io-2.18.0-bin\\commons-io-2.18.0"), new File("E:\\Java\\demo"), new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith("html") || pathname.isDirectory();

            }
        });
    }


}
